package com.tabnet.form.client;

import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import com.tabnet.beans.commande.Commande;
import com.tabnet.dao.DAOCommande;
import com.tabnet.dao.DAOException;
import com.tabnet.form.FormValidationException;

public class DetailCommandeForm {

    public static final String PARAM_COMMANDE		= "commande";
    
    private String resultat;
    private Map<String, String> erreurs = new HashMap<String, String>();
    private DAOCommande _DAOCommande;


    public DetailCommandeForm( DAOCommande pDAOCommande ) {
        this._DAOCommande = pDAOCommande;
    }

    public Map<String, String> getErreurs() {
        return this.erreurs;
    }
    public String getResultat() {
        return this.resultat;
    }

    private void setErreur( String champ, String message ) {
        this.erreurs.put( champ, message );
    }

    /**
     * <p>Fonction recupCommande<br />
     * Récupère une commande du paramètre présent dans l'URL.</p>
     * @param request : objet HttpServletRequest
     * @param pRef : la référence d'une commande
     * @param pIdClient : l'identifiant d'un client
     * @return une instance Commande
     */
    public Commande recupCommande( HttpServletRequest request, String pRef, int pIdClient ) {
    	
    	Commande oCommande = new Commande();

        // les tests de validation des données
        this.traiterRefCommande(pRef);

        try {
            if ( this.erreurs.isEmpty() ) {
            	oCommande = this._DAOCommande.getCommande(pRef, pIdClient);
                this.resultat = "Succès de la récupération de la commande.";
            }
            else
                this.resultat = "Échec de la récupération de la commande.";
        }
        catch ( DAOException e ) {
        	this.setErreur( "imprévu", "Erreur imprévue lors de la selection dans la base de données." );
            this.resultat = "Échec de la récupération de la commande.";
        }

        return oCommande;
    }
    
    /**
     * <p>Procédure traiterRefCommande<br />
     * Contrôle la référence d'une commande</p>
     * @param pRef: référence d'une commande
     * */
    private void traiterRefCommande( String pRef ) {
        try {
            this.validationRefProduit( pRef );
        } catch ( Exception e ) {
            this.setErreur( PARAM_COMMANDE, e.getMessage() );
        }
    }
    
    private void validationRefProduit( String pRef ) throws FormValidationException {
        if ( pRef == null || pRef.length() != 10 )
            throw new FormValidationException( "La référence n'est pas correcte." );
    }
}
